/**
 * 991.坏了的计算器
 */
public class Exerciser1 {
    public int brokenCalc(int startValue, int target) {
        // 存在目标值，那么可以有目标值倒推开始的值
        // 如果从 startValue -> target 的话使用 x2 和 -1 是不知道何时去使用哪个方法的，也可以做，但是难做
        // 就可以使用 正难则反
        // 也就是把 target 进行 ÷2 和 +1 操作进行尝试得到 startValue
        // 不存在小数的情况下，那么把整个数据分为 奇数或偶数 的情况进行处理
        // target <= startValue 奇数 -> +1 偶数的情况下不可能进行 ÷2 再变小，所以还是 +1，那么操作数就是 -> startValue - target
        // target > startValue 奇数 -> + 偶数 -> 1.进行 ÷2 ，2.进行 +1 但是应该先进行 ÷2，因为 +1就会变成奇数，操作次数就会增加

        int ret = 0;
        while(target > startValue) {
            if(target % 2 == 0) {
                // 偶数
                target /= 2;
            }else {
                target += 1;
            }
            ret++;
        }

        return ret + (startValue - target); // ret + (target <= startValue的情况)
    }
}
